package com.ywk.base.javaBase.collection.list;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 使用 LinkedHashMap 实现的一个 LRU 缓存：
 * - 设定最大缓存空间 MAX_ENTRIES  为 3；
 * - 使用 LinkedHashMap 的构造函数将 accessOrder 设置为 true，开启 LRU 顺序；
 * - 覆盖 removeEldestEntry() 方法实现，在节点多于 MAX_ENTRIES 就会将最近最久未使用的数据移除
 *
 * @Author zbh
 * @Date 2023/3/31
 */
public class LRUCache<K,V> extends LinkedHashMap<K,V> {
    private static final int MAX_ENTRIES = 3;


    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
    }

    public LRUCache() {
        super(MAX_ENTRIES, 0.75f, true);
    }

    public static void main(String[] args) {
        LRUCache<Integer, String> lruCache = new LRUCache<>();
        lruCache.put(1, "a");
        lruCache.put(2, "b");
        lruCache.put(3, "c");
        lruCache.get(1);
        lruCache.put(4, "d");
        System.out.println(lruCache.keySet());

    }
}
